package model;

import java.awt.Point;
import java.util.ArrayList;
import java.util.Random;

import javax.swing.JOptionPane;

import controller.IaMove;

public class EasyIA extends Player {
	
	private Random rand = new Random();

	public EasyIA(PieceType piece) {
		super(piece);
		setReady(true);
	}

	@Override
	public void play(Board board) {
		// Vetor para guardar os movimentos possíveis.
		ArrayList<Point> moves = new ArrayList<Point>();
		
		/* Verifica para cada coluna se é possível jogar nela. */
		for (int j = 0; j < board.getPieces()[0].length; j++) {
			if ( ! board.getPieces()[0][j].equals(PieceType.NONE)) continue;
			for (int i = board.getPieces().length - 1; i >= 0; i--) {
				if (board.getPieces()[i][j].equals(PieceType.NONE)) {
					moves.add(new Point(i, j));
					break;
				}
			}
		}
		
		/* Garante que encontrou pelo menos uma jogada possível. */
		if (moves.size() == 0) return;
		
		/* Tenta encontrar uma jogadas que vai fazer ganhar imediatamente. */
		for (Point p : moves) {
			board.setPiece(p, PieceType.PLAYER2);
			if (Rules.gameOver(board)) {
				new IaMove(p);
				return;
			}
			board.setPiece(p, PieceType.NONE);
		}
		
		/* Tenta encontrar uma jogada que vai impedir o outro de ganhar. */
		for (Point p : moves) {
			board.setPiece(p, PieceType.PLAYER1);
			if (Rules.gameOver(board)) {
				board.setPiece(p, PieceType.PLAYER2);
				new IaMove(p);
				return;
			}
			board.setPiece(p, PieceType.NONE);
		}
		
		/* Sorteia uma posição para jogar. */
		Point choosed = moves.get(Math.abs(rand.nextInt()) % moves.size());
		board.setPiece(choosed, PieceType.PLAYER2);
		new IaMove(choosed);
	}

	@Override
	public void youWin() {
		JOptionPane.showMessageDialog(null, "Você perdeu.", "Game Over", JOptionPane.WARNING_MESSAGE);
	}

}
